package com.xc.taoku.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.xc.taoku.entity.Category;
import com.xc.taoku.entity.Orders;
import com.xc.taoku.entity.Product;
import com.xc.taoku.entity.User;
import com.xc.taoku.mapper.CategoryMapper;
import com.xc.taoku.mapper.ProductMapper;
import com.xc.taoku.mapper.UserMapper;
import com.xc.taoku.service.IOrderService;
import com.xc.taoku.vo.CartVo;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
import java.util.ArrayList;
import java.util.List;

@Controller
public class IndexController {

    @Resource
    CategoryMapper categoryMapper;

    @Resource
    ProductMapper productMapper;


    @Resource
    UserMapper userMapper;

    @Resource
    IOrderService orderService;

    @RequestMapping("/index.do")
    public String index(Model mdl){

        //查询分类信息，放入作用域，跳转到首页
        getCategoryData(mdl);
        return "index";

    }

    @RequestMapping("/saveOrder.do")
    public String saveOrder(Model mdl, HttpSession session){

        //查询分类信息，放入作用域，跳转到首页
        getCategoryData(mdl);

        //从session中获取数据
        List<CartVo> cart = ( List<CartVo>)session.getAttribute("cart");
        if(cart!=null){

            //要从session中获取登录的用户信息.
            User user = userMapper.selectById(1);

            //保存订单
           Orders orders = orderService.saveOrder(cart, user);

            //清空购物车
            session.removeAttribute("cart");
            //
            //一个是订单详情
            //一个是订单
            mdl.addAttribute("orderItem", cart);
            mdl.addAttribute("orders", orders);
        }

        return "orderinfo";

    }


    @RequestMapping("/delCart.do")
    public String delCart(int id, HttpSession session){

        Product product = productMapper.selectById(id);
        CartVo cartVo = new CartVo();
        cartVo.setProduct(product);

        List cart = (List)session.getAttribute("cart");
        cart.remove(cartVo);

        return "cart";
    }


    @RequestMapping("/addToCart.do")
    public String addToCart(Integer pid, HttpSession session, int count,  Model mdl){

        //加入购物车？购物车是一个集合，集合还需要放入session中

        //查询商品
        Product product = productMapper.selectById(pid);

        //从session中获取购物车集合，如果是第一次获取，那么肯定是空的
        List cart = (List)session.getAttribute("cart");
        if(cart==null){
            cart = new ArrayList();
            session.setAttribute("cart", cart);
        }
        //蒋购买的商品放入购物车中.
        CartVo cartVo = new CartVo();
        cartVo.setProduct(product);
        //一定是1？
        //向购物车中放商品，判断购物车中是否存在改商品，如果不存在，那么数量就是1或者是传递的数量。
        //如果存在改商品，则需要将原来的商品的数量取出再加上1或者是传递的数量。

        //从cart中判断，如果有，返回下标，没有返回-1，从集合中判断一个对象是否存在，需要做什么辅助工作吗？
        int index = cart.indexOf(cartVo);
        if(index==-1){
            cartVo.setCount(count);
            //第一次就放入购物车中.
            cart.add(cartVo);
        }else{
            CartVo o = (CartVo)cart.get(index);
            int newCount =  o.getCount()+ count;
            //如果存在，不需要网购物中放，只需要修改整个原来购物中的整个下标对应的商品的数量
            o.setCount(newCount);
        }

        mdl.addAttribute("mycart", cart);

        getCategoryData(mdl);

        //加入购物车以后，进入查看购物车的界面
        return "cart";

    }

    @RequestMapping("/showProductDetail.do")
    public String findProductDetail(Integer pid, Model mdl){

        //查询分类信息，放入作用域，跳转到首页

        System.out.println("pid = " + pid);
        Product product = productMapper.selectById(pid);
        System.out.println("product = " + product);
        getCategoryData(mdl);
        mdl.addAttribute("product", product);

        return "product";

    }

    private void getCategoryData(Model mdl) {
        List<Category> categories = categoryMapper.selectList(null);
        mdl.addAttribute("categoryData", categories);
    }


    @RequestMapping("/findProduct.do")
    public String findProduct(Model mdl, Integer cid){

        //查询分类信息，放入作用域，跳转到首页

        System.out.println("cid = " + cid);
        //根据商品的分类去查询商品。

        //构建查询对象，查询条件的对象,wrapper中存储的是查询条件
        QueryWrapper<Product> wrapper = new QueryWrapper();

        //在此处加入查询的条件， 空投包中加入一些物质

        wrapper.eq("cid",cid);
        //
        List<Product> productList = productMapper.selectList(wrapper);


        mdl.addAttribute("productData", productList);

        getCategoryData(mdl);

        return "list";

    }


    @RequestMapping("/login.do")
    public String login(Model mdl){

        //查询分类信息，放入作用域，跳转到首页
        getCategoryData(mdl);
        return "index";

    }
}
